package leetcode.weekly.week296;

public class TextEditor4 {
//	List<Character> arr;
	StringBuilder arr;
	int cur;
	int tail;

	public TextEditor4() {
//		arr = new ArrayList<>();
		arr = new StringBuilder();
		cur = 0;
		tail = 0;
	}

//	["TextEditor","addText","deleteText","addText","cursorRight","cursorLeft","deleteText","cursorLeft","cursorRight"]
//	[[],			["leetcode"],[4],["practice"],[3],[8],						[10],[2],[6]]

	public void addText(String text) {
		for (char c : text.toCharArray()) {
			arr.insert(cur++, c);
		}
	}

//	[l, e, e, t, c, o, d, e, 
	public int deleteText(int k) {
		int ans = 0;
		while (cur > 0 && k > 0) {
//			arr.remove(cur - 1);
			arr.deleteCharAt(cur - 1);
			cur--;
			k--;
			ans++;
		}
		return ans;
	}

	public String cursorLeft(int k) {
		cur = Math.max(cur - k, 0);
		int l = Math.max(0, cur - 10);
		return arr.substring(l, cur);
	}

	public String cursorRight(int k) {
		int size = arr.length();
		cur = Math.min(cur + k, size);
		int l = Math.max(0, cur - 10);
		return arr.substring(l, cur);
	}

	public static void main(String[] args) {
		TextEditor4 textEditor = new TextEditor4(); // 当前 text 为 "|" 。（'|' 字符表示光标）
		textEditor.addText("leetcode"); // 当前文本为 "leetcode|" 。
		textEditor.deleteText(4); // 返回 4
									// 当前文本为 "leet|" 。
									// 删除了 4 个字符。
		textEditor.addText("practice"); // 当前文本为 "leetpractice|" 。
		textEditor.cursorRight(3); // 返回 "etpractice"
									// 当前文本为 "leetpractice|".
									// 光标无法移动到文本以外，所以无法移动。
									// "etpractice" 是光标左边的 10 个字符。
		textEditor.cursorLeft(8); // 返回 "leet"
									// 当前文本为 "leet|practice" 。
									// "leet" 是光标左边的 min(10, 4) = 4 个字符。
		textEditor.deleteText(10); // 返回 4
									// 当前文本为 "|practice" 。
									// 只有 4 个字符被删除了。
		textEditor.cursorLeft(2); // 返回 ""
									// 当前文本为 "|practice" 。
									// 光标无法移动到文本以外，所以无法移动。
									// "" 是光标左边的 min(10, 0) = 0 个字符。
		textEditor.cursorRight(6); // 返回 "practi"
									// 当前文本为 "practi|ce" 。
									// "practi" 是光标左边的 min(10, 6) = 6 个字符。
	}
}
